package org.jdamico.pskcbuilder.utils; import java.io.File; import java.io.IOException; import java.io.StringReader; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.jdamico.pskcbuilder.dataobjects.KeyContainer; import org.xml.sax.SAXException; /** * * @author Jose Damico * Eclipse Public License - v 1.0 (http://www.eclipse.org/legal/epl-v10.html) * */ public class XmlUtils { private static XmlUtils INSTANCE = null; public static XmlUtils getInstance(){ if(INSTANCE == null) INSTANCE = new XmlUtils(); return INSTANCE; } private XmlUtils(){} public boolean isDocValid(String xml) { boolean ret = true; SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); File schemaLocation = new File(Constants.XSD_PATH); if(schemaLocation.exists()){ Schema schema = null; try { schema = factory.newSchema(schemaLocation); } catch (SAXException e) { ret = false; e.printStackTrace(); } Validator validator = schema.newValidator(); Source source = new StreamSource(new StringReader(xml)); try { validator.validate(source); } catch (SAXException e) { ret = false; e.printStackTrace(); } catch (IOException e) { ret = false; e.printStackTrace(); } }else{ ret = false; } return ret; } public String Obj2XmlStr(KeyContainer kc) { StringBuffer sb = new StringBuffer(); sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); sb.append("<KeyContainer Version=\"1.0\" xmlns=\"urn:ietf:params:xml:ns:keyprov:pskc\">\n"); for (int i = 0; i < kc.getKeyPackageList().size(); i++) { sb.append("<KeyPackage>\n"); sb.append("<DeviceInfo>\n"); sb.append("<Manufacturer>"+kc.getKeyPackageList().get(i).getDeviceInfo().getManufacturer()+"</Manufacturer>\n"); sb.append("<SerialNo>"+kc.getKeyPackageList().get(i).getDeviceInfo().getSerialNo()+"</SerialNo>\n"); sb.append("</DeviceInfo>\n"); sb.append("<Key Id=\""+(i+1)+"\" Algorithm=\""+kc.getKeyPackageList().get(i).getKey().getAlgorithm()+"\">\n"); sb.append("<Issuer>"+kc.getKeyPackageList().get(i).getKey().getIssuer()+"</Issuer>\n"); sb.append("<AlgorithmParameters>\n"); sb.append("<ResponseFormat Length=\""+kc.getKeyPackageList().get(i).getKey().getAlgorithmParameters().getResponseFormat().getLength()+"\" Encoding=\""+kc.getKeyPackageList().get(i).getKey().getAlgorithmParameters().getResponseFormat().getEncoding()+"\"/>\n"); sb.append("</AlgorithmParameters>\n"); sb.append("<Data>\n"); sb.append("<Secret><PlainValue>"+kc.getKeyPackageList().get(i).getKey().getData().getSecret().getPlainValue()+"</PlainValue></Secret>\n"); String sAlgoType = kc.getKeyPackageList().get(i).getKey().getAlgorithmParameters().getAlgoType() == Constants.ALGO_TYPE_HOTP ? "Counter" : "Time"; sb.append("<"+sAlgoType+"><PlainValue>"+kc.getKeyPackageList().get(i).getKey().getData().getCounter()+"</PlainValue></"+sAlgoType+">\n"); sb.append("<TimeInterval><PlainValue>"+kc.getKeyPackageList().get(i).getKey().getData().getTimeInterval()+"</PlainValue></TimeInterval>\n"); //"<TimeDrift><PlainValue>"+kc.getKeyPackageList().get(i).getKey().getData().getTimeInterval()+"</PlainValue></TimeDrift>\n" + sb.append("</Data>\n"); sb.append("</Key>\n"); sb.append("</KeyPackage>\n"); } sb.append("</KeyContainer>"); return sb.toString(); } }